今天帶來的是 XXE ( XML External Entity ) Injection 的攻擊介紹
首先我們先來了解什麼是 XML ?
XML(eXtensible Markup Language)是一種旨在描述資料結構和含義的可擴展標記語言,與HTML不同的是,XML允許使用者自定義標籤名稱,使其非常靈活且可擴展
XML 也採用樹狀結構,使用標籤來組織資料,適用於文檔結構描述、資料交換和儲存等多種應用,儘管在現代網路應用程式中,JSON格式逐漸取代了XML的地位,但XML仍然在特定領域和需要結構化資料傳輸的場景中發揮著關鍵作用
word , pdf...等也都有使用XML描述檔案
XML實體是XML文件中的可重複使用片段,可以通過實體引用在文件中引用它們
攻擊者通常利用這一點來插入惡意的外部實體引用,以執行未授權操作或洩露敏感資訊
為防範此類攻擊,應避免接受來自不受信任來源的XML,或者嚴格限制解析器對外部實體的解析能力
DTD(Document Type Definition)是一種用於定義XML文件結構的標準,它定義了文件中允許使用的元素類型、元素順序以及元素屬性
不安全的DTD設定可能導致XXE漏洞的產生。為了避免這種情況,應盡量避免使用外部實體引用,或者限制解析器對外部實體的解析
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY name "XXX"> <!-- 名子為 name 值為 XXX -->
]>
<author>&name;</author>
<!DOCTYPE author[]>
宣告了一個名為author的文件類型定義(DTD),DTD定義了XML文件中允許的元素、屬性和結構
<!ELEMENT author (#PCDATA)>
定義了author元素可以包含純文本資料
<!ENTITY name "XXX">
定義了一個名為name的實體,其值為"XXX"
<author>&name;</author>
創建了一個名為author的元素,並通過&name; 實體引用將其值設置為實體name所代表的值,也就是"XXX"
XXE (XML External Entity) Injection 通常出現在使用 XML 解析器的應用程式中,攻擊者通過在 XML 文件中插入惡意的外部實體來引入外部資源,可能導致敏感資訊的洩露或未授權的系統訪問
如果應用程式處理來自不受信任來源的 XML 資料,並且未對外部實體進行適當的限制或過濾,則可能面臨 XXE Injection 的威脅
攻擊者通過插入外部實體來引入外部資源,可能導致資料洩露或未授權的系統訪問
<!DOCTYPE data [
<!ENTITY ext SYSTEM "file:///etc/passwd">
]>
<root>
<data>&ext;</data>
</root>
在上面的例子中,<!DOCTYPE data []>
宣告了一個名為 data 的文件類型定義(DTD)
接著 <!ENTITY ext SYSTEM "file:///etc/passwd">
定義了一個名為 ext 的實體,其值是系統中的 /etc/passwd
檔案
最後,在 XML 文件的 <root>
元素中,<data>&ext;</data>
使用了 &ext;
實體引用,這導致解析器將該實體替換為 /etc/passwd
檔案的內容,導致資料外洩
攻擊者利用外部實體注入漏洞,引導應用程式向受信任內部網路或外部網站發送未授權的請求,可能導致敏感資料外洩或系統服務拒絕
SSRF(Server-Side Request Forgery)是一種安全漏洞,攻擊者利用這種漏洞可以欺騙應用程式向內部或外部的資源發送未授權的請求
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
在這個例子中,xxe 實體引用被設定為一個可能存在安全漏洞的內部網站的 URL,攻擊者可以利用這個設定進一步探索或攻擊內部網路資源
https://portswigger.net/web-security/xxe